
public class Memoria {

	    private int MAXTAM;//Tamano m�ximo de nuestra memoria.
	    private String[] mem;//Array con los elementos de la memoria.
	    private int tam;//n�mero de datos en nuestra memoria
	    private int pilaPos;
	    private int heapPos;

	    //Constructora.
	    public Memoria(){
	        MAXTAM=1000;//definimos el tama�o m�ximo a 100 por ejemplo.
	        mem = new String[MAXTAM];
	        for(int i=0;i<MAXTAM;i++)
	        	mem[i]="0";//La inicializamos a cero
	        tam = 0;
	        pilaPos=0;
	        heapPos=MAXTAM-1;
	    }

	    public void setDato(int dir, String valor){
	        mem[dir] = valor;
	        pilaPos=Math.max(dir,pilaPos);
	    }
	    

		public void iniciaDato(int dir, String valor){
	        mem[dir] = valor;
	        tam++;
	    }
	    
	    public String getDato(int dir){
	        return mem[dir];
	    }

	    public int getTam(){
	        return tam;
	    }
	    public int newHeap(int espacio){
	    	int pos=0;
	    	int fin=0;
	    	int posicion=0;
	    	 for (int i=heapPos;i<1000;i++){
	    		 if(mem[i].equals("del"))pos+=1;
	    		 else{
	    			 if(fin<=pos){
	    				 fin=pos;
	    				 posicion=i-pos;
	    			 }
	    			 pos=0;
	    		 }
	    	 }
	    	 if(fin>=espacio){
	    		 for(int i=posicion;i<posicion+espacio;i++)
	    			 mem[i]="0";
	    		 return posicion;
	    	 }
	    	 else{
	    		 for(int i=heapPos-espacio;i<heapPos+espacio;i++)
	    			 mem[i]="0";
	    		 heapPos=heapPos-espacio;
	    		 if(heapPos<pilaPos)return -1;
	    		 else return heapPos;
	    	 }
	    }
	    public void delHeap(int espacio,int direccion){
	    	for (int i=direccion;i<direccion+espacio;i++)
	    		mem[i]="del";
	    	if (direccion==heapPos)
	    		heapPos=direccion;
	    }

		public void mueve(int dirSource,int dirDest, int auxdato) {
			for (int i=0;i<auxdato;i++){
				mem[i+dirDest]=mem[i+dirSource];
			} 
			
		}
}